from sqlalchemy import Column, Integer, String, DateTime, func, ForeignKey
from sqlalchemy.orm import relationship

from model.player_group_rel import player_group_rel
from server import Base


# 创建选手表
class GroupModel(Base):
    __tablename__ = "group"

    # 用户 ID, 用户的唯 一标识
    id = Column(Integer, primary_key=True)
    # 用户名, 限定 80个字符 ，不为空，并且唯一
    name = Column(String(80), unique=True)
    # 比赛 ID, 用户的唯 一标识
    match_id =  Column(Integer, ForeignKey('match.id', ondelete='CASCADE'))
    # 参数1： 关联的另外一个业务表类名， 参数2： 反射别名
    match = relationship("MatchModel", backref="group")
    # 成员
    players = relationship("PlayerModel", secondary=player_group_rel, backref='group')
    # 创建时间,不需要手动传入，在写入记录的时候自动生成
    create_time = Column(DateTime, default=func.now())

    def __repr__(self):
        # 数据库的 魔法方法 直观展示数据
        '''[<User "xxxx">,<User "yyyy">]'''
        return '<Plan %r>' % self.name

    def as_dict(self):
        return {
            "id": self.id,
            "name": self.name,
            "match_id": self.match_id,
            "match": self.match.as_dict(),
            "players": [player.as_dict() for player in self.players],
            "create_time": str(self.create_time)
        }
